//*****************************************************************************
// JFab (http://code.google.com/p/jfab)
// Copyright (c) 2011 JFab.org
// Admin jfab@jeffreythompson.net
//
// See the file "LICENSE.txt" for information on usage and redistribution of
// this file, and for a DISCLAIMER OF ALL WARRANTIES.
//*****************************************************************************

package org.jfab.core.factory;

/**
 * Defines methods required by a factory injector.
 */
public interface FactoryInjector
{
    /**
     * @return a new code generator annotation factory.
     */
    CGAnnotationFactory injectCGAnnotationFactory();

    /**
     * @return a new code generator class factory.
     */
    CGClassFactory injectCGClassFactory();

    /**
     * @return a new code generator constructor factory.
     */
    CGConstructorFactory injectCGConstructorFactory();

    /**
     * @return a new code generator enum factory.
     */
    CGEnumFactory injectCGEnumFactory();

    /**
     * @return a new code generator enum item factory.
     */
    CGEnumItemFactory injectCGEnumItemFactory();

    /**
     * @return a new code generator field factory.
     */
    CGFieldFactory injectCGFieldFactory();

    /**
     * @return a new code generator interface factory.
     */
    CGInterfaceFactory injectCGInterfaceFactory();

    /**
     * @return a new code generator method declaration factory.
     */
    CGMethodDeclarationFactory injectCGMethodDeclarationFactory();

    /**
     * @return a new code generator method factory.
     */
    CGMethodFactory injectCGMethodFactory();

    /**
     * @return a new code generator parameter factory.
     */
    CGParameterFactory injectCGParameterFactory();

    /**
     * @return a new code generator property factory.
     */
    CGPropertyFactory injectCGPropertyFactory();

    /**
     * @return a new code generator type factory.
     */
    CGTypeFactory injectCGTypeFactory();

    /**
     * @return a new instance factory.
     */
    InstanceFactory injectInstanceFactory();

    /**
     * @return a new string factory.
     */
    StringFactory injectStringFactory();

    /**
     * @return a new type reference support.
     */
    TypeReferenceSupport injectTypeReferenceSupport();
}
